/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package server.negocio;

import cliente.comunicacion.ICliente;
import java.rmi.RemoteException;
import java.util.logging.Level;
import java.util.logging.Logger;
import server.dominio.ISesion;
import java.util.Hashtable;
import server.comunicacion.ServidorA;
import server.dominio.Sesion;
import server.excepciones.UsuarioIncorrectoException;
import server.presentacion.JF_Servidor;
import server.presentacion.iJF_Servidor;


/**
 *
 * @author tpaxle
 */
public class Controlador_Servidor {
     private Hashtable<String, ISesion> tablalogins;
     private Hashtable<Long, ICliente> tablasesiones;
     private ServidorA servidor;
     private iJF_Servidor ventana;

    public Controlador_Servidor(ServidorA servidor, JF_Servidor ventanav) {
         tablalogins= new Hashtable<String, ISesion>();
         tablasesiones= new Hashtable<Long, ICliente>();
         this.servidor= servidor;
         ventana= ventanav;
    }


     public void registrar(long idSesion, ICliente cliente){
          tablasesiones.put(idSesion, cliente);
     }


     private void desconectar(long idSesion){
         //aki se procede a mandar el mensaje de salida al ICliente
     }



    public boolean comprobarUsuario(int tipo, long idSesion) throws UsuarioIncorrectoException{
        if(true || tablasesiones.contains(idSesion)){
            //Si el usuario con ese idSesion está autenticado Saber que contiene el ICLIENTE y comprobar dni es administrar
        }else{
           ventana.escribir("La idSesion introducida no es válida o la sesion creada no esta asociada a un usuario con dicho rol("+tipo+")");
           throw new UsuarioIncorrectoException("El usuario con idSesion no está autenticado");
        }
        return true;
    }

    public boolean existelogin(String login) {
        return tablalogins.get(login)!= null;
    }

    public void eliminarlogin(String cadena_login) {
        //Se expulsa de la sesion en primer lugar
        ISesion sesion= tablalogins.get(cadena_login);
        //Obtenemos el ICLIENTE
        ICliente cliente= tablasesiones.get(sesion.getId());
        //Eliminamos al usuario inciiado
        tablalogins.remove(cadena_login);
        try {
            //Se manda mensaje al usuario pa ke termine su sesion
            cliente.holamundo();
        } catch (RemoteException ex) {
            ventana.escribir("Mensaje de finalizacion no entregada al cliente: \n"+ cadena_login);
        } finally {
            tablasesiones.remove(sesion.getId());
        }
    }

    public boolean comprobaridSesion(long idSesion) {
        return tablasesiones.contains(idSesion);
    }

    public void insertarusuario(String login, Sesion sesionaux) {
        tablalogins.put(login, sesionaux);
    }

    public ICliente getCliente(long idSesion) {
        return tablasesiones.get(idSesion);
    }

    public void log(String mensaje) {
        ventana.escribir(mensaje);
    }
    
}




